package benworks.bookcode.wsjc.suggestion120;

/**
 * 正确的停止线程的方法：使用自定义的标志位决定线程的执行情况
 * 
 * @author Ben
 */
public class SafeStopThread extends Thread {
	// 此变量必须加上volatile
	private volatile boolean stop = false;

	@Override
	public void run() {
		// 判断线程体是否运行
		while (stop) {
			// Do Something
			System.out.println("do something...");
		}
	}

	// 线程终止
	public void terminate() {
		stop = true;
	}

	public static void main(String[] args) {
		Thread t1 = new Thread() {
			@Override
			public void run() {
				// 线程一直运行
				// while (true) {//错误的写法
				while (!isInterrupted()) {
					System.out.println("Running.......");
				}
			}
		};
		// 启动t1线程
		t1.start();
		// 中断t1线程（无法中断，interrupt不能终止一个线程状态，它只会改变中断标志位
		t1.interrupt();
	}
}
